<?php
error_reporting(E_ALL ^ E_NOTICE);
ini_set ( 'memory_limit', '1000M' );
set_time_limit ( 0 );
/**
 * type常量值
 */
CONST TYPE_1 = 1;
CONST TYPE_2 = 2;
CONST TYPE_3 = 3;
CONST TYPE_4 = 4;
CONST TYPE_5 = 5;
CONST TYPE_6 = 6;
CONST TYPE_7 = 7;
CONST TYPE_8 = 8;
CONST TYPE_9 = 9;
//CONST TYPE_10 = 10;

CONST EXCEPTION_VALUE_MIN_PRICE = 0;

CONST EXCEPTION_VALUE_MAX_PRICE = 200000;  //million

/**
 * 楼层字典
 */
$arr_floor_dist = array(
    '高'=>'',
    '中'=>'',
    '低'=>'',
);

/**
 * 
 * hadoop处理第一步：去除数据异常数据、gov表中根据source_url去重
 * input：gov表数据，格式：json(所有数据数组形式json)
		like:{"id":"516783",
			  "broker_id":null,......}
 * output：1、去重之后的数据；2、gov表中需要删除的重复数据 
 *  mapper_1.php
 *      input:gov表数据，格式json(所有数据数组的格式)
 *      handle:价格、面积、楼层、总楼层、室、厅、卫等异常数据
 *      output:按照source_url进行排序的数据，数据格式source_url\tTYPE\tjson(所有数据数组的格式)
			   对异常数据进行标注
 * @updated 2016-01-16
 * @by lily
 */
 
 while(($line_json = fgets(STDIN)) !== false){

    $line_json = trim($line_json);
    if(empty($line_json)) continue;
    /**
     * id,house_title,house_price,cityarea_id,cityarea2_id,house_floor, 6
     * house_topfloor,house_toward,house_room,house_hall,house_toilet, 5
     * house_kitchen,owner_name,owner_phone,source,source_url, 5
     * house_totalarea,borough_id,borough_name 3
     * */
    $line = json_decode($line_json,true);
    /**
     * map阶段输出的第二个字段标示数据是否正常，如果不正常是哪个字段的问题；source=10的个人房源限制条件放宽。
     * 排除掉异常数据，正常数据对比完之后，根据对比数据结果反馈补充异常数据
     * 1:正常
     * 2:价格(house_price)数据异常
     * 3:面积(house_totalarea)数据异常
     * 4:楼层(house_floor)数据异常 
     * 5:总楼层(house_topfloor)数据异常
     * 6:室(house_room)数据异常
     * 7:厅(house_hall)数据异常
     * 8:卫(house_toilet)数据异常
     */
    
    if(!is_array($line) || empty($line['source_url'])){
        echo $line['source_url']."\t".TYPE_9."\t".$line_json."\n";
       continue;
    }
    //如果是个人房源，房源属性判断标准降低
    if($line['source'] == 10){
	echo $line['source_url']."\t".TYPE_1."\t".$line_json."\n";
        continue;
    }
    
    //价格异常
    if($line['house_price'] <= EXCEPTION_VALUE_MIN_PRICE || $line['house_price'] >= EXCEPTION_VALUE_MAX_PRICE){
        echo $line['source_url']."\t".TYPE_2."\t".$line_json."\n";
        continue;
    }
    //总面积异常(查gov表中面积最大的值，20000平米)（没有面积的根据价格来预估面积范围区间）
    if($line['house_totalarea'] <=0 || $line['house_totalarea']>=40000){
        echo $line['source_url']."\t".TYPE_3."\t".$line_json."\n";
        continue;
    }
    //楼层数据异常(查询gov表中总楼层最大值，65层 银泰中心)
    if((!in_array($line['house_floor'],$arr_floor_dist)) && ($line['house_floor'] <=-4 && $line['house_floor']>=66)){
        echo $line['source_url']."\t".TYPE_4."\t".$line_json."\n";
        continue;
    }
    //总楼层数据异常(查询gov表中总楼层最大值，65层 银泰中心)
    if($line['house_topfloor'] <0 || $line['house_topfloor']>=66){
		if ($line['house_topfloor']==null) continue;   //允许空值
        echo $line['source_url']."\t".TYPE_5."\t".$line_json."\n";
        continue;
    }
    //室数据异常(查询gov表中总楼层最大值，20),不能为空。（根据面积来预估室）
    if($line['house_room'] <0 || $line['house_room']>=21){
        echo $line['source_url']."\t".TYPE_6."\t".$line_json."\n";
        continue;
    }
    //厅数据异常(查询gov表中总楼层最大值，11)
    if($line['house_hall'] <0 || $line['house_hall']>=12){
        echo $line['source_url']."\t".TYPE_7."\t".$line_json."\n";
        continue;
    }
    //卫数据异常(查询gov表中总楼层最大值，10)
    if($line['house_toilet'] <0 || $line['house_toilet']>=11){
        echo $line['source_url']."\t".TYPE_8."\t".$line_json."\n";
        continue;
    }
    
    echo $line['source_url']."\t".TYPE_1."\t".$line_json."\n";  //normal data
}
